import Vue from 'vue'
import VueRouter from 'vue-router'

// 导入 练习的 组件 路由
import Day from '@/views/routers/Day/Days/Dayindex.js'
// 导入 思维导图的 组件 路由
import Note from '@/views/routers/Day/Note/NoteIndex.js'
//  大项目 1 大事件路由
import Stag from '@/project/staggerer/router/index.js'
// 导入个人主页路由组件
const MyGLfIndex = () => import('@/views/MyGLfIndex.vue')

import store from '@/store/index.js'

Vue.use(VueRouter)
//获取原型对象上的push函数
const originalPush = VueRouter.prototype.push
//修改原型对象中的push方法
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}
// 声明路由规则
const routes = [
  { path: '/', redirect: '/myg' },
  // 主页
  {
    path: '/myg',
    components: {
      default: MyGLfIndex
    },
    meta: {
      tltie: '首页',
      tx: 1
    }
  },
  // 作业页面
  {
    name: 'Books',
    path: '/book',
    // 懒加载组件 作业主页 的路由组件
    component: () => import('@/views/BookAppIndex.vue'),
    // component: Books,
    children: [
      {
        path: 'dayindex',
        //  懒加载组件 练习的路由组件
        component: () => import('@/views/Dayindex.vue'),
        children: [...Day]
      },
      {
        path: 'vnoteindex',
        // 懒加载组件 思维导图的路由组件
        component: () => import('@/views/VNoteindex.vue'),
        children: [...Note]
      }
    ]
  },
  // 大项目 1 大事件
  {
    name: 'Ditmv',
    path: '/staggerer',
    redirect: '/staggerer/logbox/login',
    // 组件懒加载 大项目 1 大事件组件
    component: () => import('@/project/staggerer/Dsrc/D-MyApp.vue'),
    // component: Ditm,
    children: [...Stag],
    meta: {
      tltie: '大事件',
      tx: 2
    }
  },

  // 404
  { path: '*', component: () => import('@/components/App/My404.vue') }
]

// 创建路由实例对象
const router = new VueRouter({
  routes
})

// 当用户没有登录时候 强制跳转到 登录页面
router.beforeEach((to, form, next) => {
  const whiteList = ['/staggerer/logbox/login', '/staggerer/logbox/reg']
  if (to.path === '/staggerer/main' && !store.state.Ditem.token) {
    Vue.prototype.$message.error('请登录!')
    next('/staggerer/logbox/login')
  }
  next()
})
export default router
